package com.sromku.simple.fb.actions; import java.util.ArrayList; import java.util.List; import android.annotation.SuppressLint; import android.app.Activity; import android.app.Dialog; import android.os.Bundle; import android.text.TextUtils; import android.view.Window; import android.view.WindowManager; import com.facebook.FacebookException; import com.facebook.FacebookOperationCanceledException; import com.facebook.Session; import com.facebook.widget.WebDialog; import com.sromku.simple.fb.SessionManager; import com.sromku.simple.fb.listeners.OnInviteListener; import com.sromku.simple.fb.utils.Errors; import com.sromku.simple.fb.utils.Errors.ErrorMsg; import com.sromku.simple.fb.utils.Logger; public class InviteAction extends AbstractAction { private OnInviteListener mOnInviteListener; private String mMessage; private String mData; private String mTo; private String[] mSuggestions; private static final String PARAM_MESSAGE = "message"; private static final String PARAM_DATA = "data"; private static final String PARAM_TO = "to"; private static final String PARAM_SUGGESTIONS = "suggestions"; public InviteAction(SessionManager sessionManager) { super(sessionManager); } public void setMessage(String message) { mMessage = message; } public void setData(String data) { mData = data; } public void setTo(String to) { mTo = to; } public void setSuggestions(String[] suggestions) { mSuggestions = suggestions; } public void setOnInviteListener(OnInviteListener onInviteListener) { mOnInviteListener = onInviteListener; } @Override protected void executeImpl() { if (sessionManager.isLogin(true)) { Bundle params = new Bundle(); if (mMessage != null) { params.putString(PARAM_MESSAGE, mMessage); } if (mData != null) { params.putString(PARAM_DATA, mData); } if (mTo != null) { params.putString(PARAM_TO, mTo); } else if (mSuggestions != null) { params.putString(PARAM_SUGGESTIONS, TextUtils.join(",", mSuggestions)); } openInviteDialog(sessionManager.getActivity(), params, mOnInviteListener); } else { String reason = Errors.getError(ErrorMsg.LOGIN); Logger.logError(InviteAction.class, reason, null); mOnInviteListener.onFail(reason); } } private void openInviteDialog(Activity activity, Bundle params, final OnInviteListener onInviteListener) { final Dialog dialog = new WebDialog.RequestsDialogBuilder(activity, Session.getActiveSession(), params).setOnCompleteListener(new WebDialog.OnCompleteListener() { @Override public void onComplete(Bundle values, FacebookException error) { if (error != null) { Logger.logError(InviteAction.class, "Failed to invite", error); if (error instanceof FacebookOperationCanceledException) { onInviteListener.onCancel(); } else { if (onInviteListener != null) { onInviteListener.onException(error); } } } else { Object object = values.get("request"); if (object == null) { onInviteListener.onCancel(); } else { List<String> invitedFriends = fetchInvitedFriends(values); onInviteListener.onComplete(invitedFriends, object.toString()); } } } }).build(); Window dialogWindow = dialog.getWindow(); dialogWindow.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); dialog.show(); } /** * Fetch invited friends from response bundle * * @param values * @return list of invited friends */ @SuppressLint("DefaultLocale") private static List<String> fetchInvitedFriends(Bundle values) { List<String> friends = new ArrayList<String>(); int size = values.size(); int numOfFriends = size - 1; if (numOfFriends > 0) { for (int i = 0; i < numOfFriends; i++) { String key = String.format("to[%d]", i); String friendId = values.getString(key); if (friendId != null) { friends.add(friendId); } } } return friends; } }